package collection;

import java.util.Iterator;

public interface ILinkedList<N extends ANode<T>, T> extends Iterable<N>{

	public N createNode(T element);
	
	public boolean isEmpty();
	
	public void clear();
	
	public int size();
	
	public N getFirst();
	
	public N getLast();
	
	public N getPrev(N someNode);
	
	public N getNext(N someNode);
	
	public void addFirst(N newNode);
	
	public void addLast(N newNode);
	
	public N removeFirst();
	
	public N removeLast();
	
	public void reverse();
	
	public void addBefore(N someNode, N newNode);
	
	public void addAfter(N someNode, N newNode);
	
	public void remove(N node);
	
	public boolean contains(N node);
	
	public Iterator<N> iterator();
	
	public Iterator<T> elementsIterator();

}
